/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import model.bean.BeanArchivo;
import model.bean.BeanCurso;
import model.bean.BeanEstado;
import model.bean.BeanPrivilegio;
import model.bean.BeanTipoArchivo;
import model.bean.BeanUsuario;
import model.daobase.DBase;

/**
 *
 * @author francotel
 */
public class DaoUsuario extends DBase{
    
    // para poder autenticar al usuario registrado (moderador y/o administrador)
    public int autentica(String correo, String clave) {

        this.init_mysql(); // inicializamos la conexion
        PreparedStatement pstmt = null; // preparamos la sentencia
        ResultSet res = null; // variable res que guardara los resultados obtenidos
        int iduser = 0; // id para poder manejar los id de usuarios
        
        try {
            
            // creamos el query : select idusuario from usuario where (correo like "francotel@pucp.pe" and clave like md5("1234"));
            String query =
                    "SELECT idusuario "
                    + "FROM usuario "
                    + "WHERE (correo LIKE '" + correo + "') "
                    + "AND (clave LIKE md5('" + clave + "'))";

            pstmt = conn.prepareStatement(query);// conectamos la sentencia a base de datos incluido con el query
            res = pstmt.executeQuery(); // se ejecuta el query guardandose los resultados en res

            while (res.next()) {

                iduser = res.getInt(1); // en este caso solo habra un resultado puesto un correo y clave solo pertenece a un usuario
                                        //y guardamos el resultado en iduser

            }

            res.close();
            pstmt.close();
            conn.close();
        } catch (SQLException e1) {

            e1.getMessage();
        }

        return iduser;
    }
    
    
    // Inicializar al BeanUsuario luego de obtenido el iduser
    // puesto que este me indica si es un administrador,moderador o usuario
    // de acuerdo a ello ,es decir, al privilegio y estado se puede obtener sus datos
    
    public ArrayList<BeanUsuario> getUserList() {
        ArrayList<BeanUsuario> UserList = new ArrayList<BeanUsuario>();
        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        BeanUsuario usuario = null;

        try {

            String query = "select * FROM usuario u INNER JOIN privilegio p ON p.idprivilegio=u.idprivilegio"
                    + " INNER JOIN estado e ON u.idestado=e.idestado WHERE u.idprivilegio=0";

            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();
            while (res.next()) {
                usuario = new BeanUsuario();
                usuario.setIdusuario(res.getInt("idusuario"));
                usuario.setNombre(res.getString("nombre"));
                usuario.setApellido(res.getString("apellido"));
                usuario.setAlias(res.getString("alias"));
                usuario.setCorreo(res.getString("correo"));
                usuario.setFecha_registro(res.getDate("fecha_registro"));
                BeanPrivilegio privilegio = new BeanPrivilegio();
                privilegio.setIdprivilegio(res.getInt("idprivilegio"));
                privilegio.setNombre_privilegio(res.getString("nombre_privilegio"));
                usuario.setPrivilegio(privilegio);
                BeanEstado estado = new BeanEstado();
                estado.setIdestado(res.getInt("idestado"));
                estado.setNombre_estado(res.getString("nombre_estado"));
                usuario.setEstado(estado);
                usuario.setFecha_cambio_estado(res.getDate("fecha_cambio_estado"));

                UserList.add(usuario);
            }



            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return UserList;

    }
    
    public BeanUsuario get(Integer idusuario) {

        this.init_mysql(); // inicializamos la conexion
        PreparedStatement pstmt = null; // preparamos la sentencia
        ResultSet res = null; // variable res que guardara los resultados obtenidos
        BeanUsuario usuario = new BeanUsuario(); // creamos al objeto usuario del BeanUsuario

        try {

            // query que selecciona todos los datos del usuario a partir de su idusuario  
            String query = "select * FROM usuario u INNER JOIN privilegio p ON p.idprivilegio=u.idprivilegio"
                    + " INNER JOIN estado e ON u.idestado=e.idestado"
                    + " WHERE u.idusuario=" + idusuario;

            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();
            
            while (res.next()) {
                
                usuario.setIdusuario(res.getInt("idusuario")); 
                usuario.setNombre(res.getString("nombre"));
                usuario.setApellido(res.getString("apellido"));
                usuario.setAlias(res.getString("alias"));
                usuario.setCorreo(res.getString("correo"));
                usuario.setFecha_registro(res.getDate("fecha_registro"));
                
                //como el privilegio es un bean aparte se debe crear un objeto de este y almacenarlo en el
                BeanPrivilegio privilegio = new BeanPrivilegio();
                privilegio.setIdprivilegio(res.getInt("idprivilegio"));
                privilegio.setNombre_privilegio(res.getString("nombre_privilegio"));
                usuario.setPrivilegio(privilegio);
               
                //como el estado es un bean aparte se debe crear un objeto de este y almacenarlo en el
                BeanEstado estado = new BeanEstado();
                estado.setIdestado(res.getInt("idestado"));
                estado.setNombre_estado(res.getString("nombre_estado"));
                usuario.setEstado(estado);
                
                usuario.setRuta_foto(res.getString("ruta_foto"));
                usuario.setFecha_cambio_estado(res.getDate("fecha_cambio_estado"));
            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }
        return usuario;

    }
    
    // metodo para validar al nuevo usuario 
    public String validausuario(BeanUsuario usuario, String clavetemp) {
    String aviso="";
    
     DaoUsuario daousuario = new DaoUsuario();

     BeanEstado estado = new BeanEstado();
     BeanPrivilegio privilegio = new BeanPrivilegio();
     
     int idusuario = daousuario.validacorreo(usuario.getCorreo());
     int iduser = daousuario.validaalias(usuario.getAlias());
     boolean  alfanumerico = daousuario.valida_caracter_alias(usuario.getAlias());
     boolean  correo_valido = daousuario.valida_dominio_pucp(usuario.getCorreo());
     boolean  nombre_valido = daousuario.valida_palabra(usuario.getNombre());
     boolean  apellido_valido = daousuario.valida_palabra(usuario.getApellido());
//     boolean start_upcase = daousuario.mayuscula(usuario.getNombre());
//     boolean start_upcase2 = daousuario.mayuscula(usuario.getApellido());
//     
     
     
      if (usuario.getNombre().isEmpty()) {
            aviso = "Ingrese su nombre";
        }
      else {
          if ((nombre_valido)) {
              
              if ((usuario.getNombre().length() > 1) && (usuario.getNombre().length() < 30)) {
                  
                  if(usuario.getApellido().isEmpty()){
                      aviso="Ingrese su apellido "+ "\n"+nombre_valido+ " ";
                  }
                  else{
                      if(apellido_valido){
                          if ((usuario.getNombre().length() > 1) && (usuario.getNombre().length() < 30)) {
                              
                              if (usuario.getAlias().isEmpty()) {
                               aviso = "Nombre de Usuario no debe ser vacio";
                              }
                              else{
                                  if(alfanumerico){
                                      
                                    if ((usuario.getAlias().length() > 1) && (usuario.getAlias().length() < 15)) {
                                     if (iduser == 0) {
                                         if (usuario.getCorreo().isEmpty()) {
                                           aviso = "Correo no debe ser vacio";
                                         }
                                         else{
                                           if(correo_valido){
                                              if(idusuario==0){
                                                  if(usuario.getClave().isEmpty()){
                                                      aviso = "ingrese una contraseña";
                                                  }
                                                  else{
                                                      if(usuario.getClave().length() > 5){
                                                          if(usuario.getClave().equals(clavetemp)){
                                                              
                                                                privilegio.setIdprivilegio(0);
                                                                usuario.setPrivilegio(privilegio);

                                                                estado.setIdestado(1);
                                                                usuario.setEstado(estado);

                                                                usuario.setRuta_foto(null);
                                                                usuario.setFecha_cambio_estado(null);
                                                        
                                                          }
                                                          else{
                                                              aviso="Las contraseñas no coinciden";
                                                          }
                                                          
                                                      }
                                                      else{
                                                          aviso="debe tener una longitud mayor a 5";
                                                      }
                                                      
                                                  }
                                                  
                                                  
                                              }
                                              else{
                                                  aviso = "Correo ya registrado!";
                                              }
                                              
                                           }
                                           else{
                                              aviso="el correo debe ser @pucp.edu.pe o @pucp.pe";
                                           }
                                          
                                          }
                                      
                                      }
                                    else{
                                      aviso = "Usuario ya existe";
                                  }
                                }
                                   else{
                                   aviso =  "alias desbe tener mas de 2 y menos de 15\"";
                                }
                                  }
                                  else{
                                      aviso = "Deben ser caracteres alfanumerico";
                                  }
                              }                              
                          }
                          else{
                              aviso="Nombre desbe tener mas de 2 y menos de 30";
                          }
                          
                          
                          
                      }
                      else{
                          aviso="Ingrese un apellido valido y que empieze con mayuscula"+ "\n";
                          
                      }
                      
                  }
              }
              else{
                  aviso="Nombre desbe tener mas de 2 y menos de 30";
              }
          }
          else{
              
              aviso = "Ingrese un nombre valido y que empieze con Mayusucla";
              
          }
          
          
        }
    
    return aviso;
     }
    
    // validamos en el usuario si su correo es pucp
    public int validacorreo(String correo) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        int iduser = 0;
        try {
            String query =
                    "SELECT idusuario "
                    + "FROM usuario "
                    + "WHERE (correo LIKE '" + correo + "') ";
            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();

            while (res.next()) {
                iduser = res.getInt(1);
            }

            res.close();
            pstmt.close();
            conn.close();
        } catch (SQLException e1) {
            e1.getMessage();
        }
        return iduser;
    }
    
    // valida el alias del usuario que recien se registra
    public int validaalias(String alias) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        int iduser = 0;
        try {
            String query =
                    "SELECT idusuario "
                    + "FROM usuario "
                    + "WHERE (alias LIKE '" + alias + "') ";

            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();
            while (res.next()) {
                iduser = res.getInt(1);
            }

            res.close();
            pstmt.close();
            conn.close();
        } catch (SQLException e1) {
            e1.getMessage();
        }
        return iduser;
    }
    
    // valida que los caracteres de alias sean correctos
    public boolean valida_caracter_alias(String temp) {

        Boolean valor = false;
//        if (temp.matches("[^a-z_A-Z_0-9]")){
        for (int i = 0; i < temp.length(); i++) {
            if ((temp.charAt(i) > 64 && temp.charAt(i) < 91) || (temp.charAt(i) > 96 && temp.charAt(i) < 123) || (temp.charAt(i) > 47 && temp.charAt(i) < 58)) {
                valor = true;
            }
            else valor =false;
        }
        return valor;
    }
    
    // valida las palabras ingresadas
    public boolean valida_palabra(String temp) {
        boolean aux = false;

        for (int i = 0; i < temp.length(); i++) {
            if ((temp.charAt(i) > 64 && temp.charAt(i) < 91) || (temp.charAt(i) > 96 && temp.charAt(i) < 123) ){
                             
                
                aux = true;
            
            }
            else aux = false;
        }
        return aux;
    }
    
    // valida el dominio del correo
    public boolean valida_dominio_pucp(String temp) {

        Boolean valor = false;

     if ((temp.matches(".+@pucp.pe")) || (temp.matches(".+@pucp.edu.pe"))) {
//        if (temp.matches("[0-9a-zA-Z]([.w][0-9a-zA-Z])+@pucp.pe") || temp.matches("[0-9a-zA-Z]([.w][0-9a-zA-Z])+@pucp.edu.pe")) {
            valor = true;
        }
        else valor=false;
        return valor;
    }
    
    public void insert(BeanUsuario usuario) {
        this.init_mysql();
        PreparedStatement pstmt = null;



        try {

            String query = " INSERT INTO usuario(nombre,apellido,alias,correo,clave,fecha_registro,idprivilegio,idestado,ruta_foto,fecha_cambio_estado) "
                    + "VALUES(?,?,?,?,md5(?),now(),?,?,?,?)";


            pstmt = conn.prepareStatement(query);

            pstmt.setString(1, usuario.getNombre());
            pstmt.setString(2, usuario.getApellido());
            pstmt.setString(3, usuario.getAlias());
            pstmt.setString(4, usuario.getCorreo());
            pstmt.setString(5, usuario.getClave());
            pstmt.setInt(6, 0);
            pstmt.setInt(7, 1);
            pstmt.setString(8, usuario.getRuta_foto());
            pstmt.setDate(9, null);

            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }


    }
    
    
     // query que despues de validar al usuario nuevo lo registra
    public void registro(BeanUsuario usuario) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        String rutafoto = "/usuarios/user.jpg";
//BeanUsuario usuario= new BeanUsuario();
        try {
            String query = "INSERT INTO usuario(nombre, apellido, alias, correo, clave, idprivilegio, idestado, ruta_foto, fecha_cambio_estado)"
                    + " VALUES('" + usuario.getNombre() + "','" + usuario.getApellido() + "','" + usuario.getAlias() + "','" + usuario.getCorreo() + "',md5('" + usuario.getClave() + "'),"
                    + " '" + usuario.getPrivilegio().getIdprivilegio() + "','" + usuario.getEstado().getIdestado() + "'," + rutafoto + "," + usuario.getFecha_cambio_estado() + ");";

            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }
//    return usuario;
    }
    
    // subir foto
    public void update_foto(BeanUsuario usuario) {
        this.init_mysql();
        PreparedStatement pstmt = null;
        try {

            String query = "UPDATE usuario SET ruta_foto = md5(concat(?,now())) WHERE idusuario=" + usuario.getIdusuario();
            pstmt = conn.prepareStatement(query);
            pstmt.setString(1, usuario.getRuta_foto());
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }
    }
    
    public String retornarutamd5(BeanUsuario usuario) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        String rutamd5="";
         try {
            String query = "select ruta_foto from usuario where nombre=?";
            pstmt = conn.prepareStatement(query);
            pstmt.setString(1, usuario.getNombre());
            res = pstmt.executeQuery();
            
            while (res.next()) {
                rutamd5 = res.getString(1);
            }

            res.close();
            pstmt.close();
            conn.close();
        } catch (SQLException e1) {
            e1.getMessage();
        }
        return rutamd5;
    }
   
    public void delete(Integer idusuario) {

        this.init_mysql();
        PreparedStatement pstmt = null;


        try {

            String query = "DELETE FROM usuario WHERE idusuario=" + idusuario;
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }
    
     public void update_data(BeanUsuario usuario) {
        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "UPDATE usuario SET nombre='" + usuario.getNombre() + "', apellido='" + usuario.getApellido() + "', alias='" + usuario.getAlias()
                    + "', correo='" + usuario.getCorreo() + "' WHERE idusuario=" + usuario.getIdusuario();
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }
    }
     
     public void update_password(BeanUsuario usuario) {
        this.init_mysql();
        PreparedStatement pstmt = null;


        try {

            String query = "UPDATE usuario SET clave=md5('" + usuario.getClave() + "') WHERE idusuario=" + usuario.getIdusuario();
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }
    }
     
     public void block(Integer idusuario) {
        this.init_mysql();
        PreparedStatement pstmt = null;


        try {

            String query = "UPDATE usuario SET idestado=0, fecha_cambio_estado=now() WHERE idusuario=" + idusuario;
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }
     
     public boolean valida_password(BeanUsuario usuario, String pass) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        int iduser = 0;

        try {
            String query =
                    "SELECT idusuario "
                    + "FROM usuario "
                    + "WHERE (clave LIKE md5(?) AND idusuario = ? )";



            pstmt = conn.prepareStatement(query);

            pstmt.setString(1, pass);
            pstmt.setInt(2, usuario.getIdusuario());

            res = pstmt.executeQuery();

            while (res.next()) {

                iduser = res.getInt(1);


            }

            res.close();
            pstmt.close();
            conn.close();
        } catch (SQLException e1) {

            e1.getMessage();
        }



        return iduser > 0;
    }
     
     public void unblock(Integer idusuario) {
        this.init_mysql();
        PreparedStatement pstmt = null;


        try {

            String query = "UPDATE usuario SET idestado=1, fecha_cambio_estado=now() WHERE idusuario=" + idusuario;
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }
     
     public void nombra_moderador(Integer idusuario) {
        this.init_mysql();
        PreparedStatement pstmt = null;


        try {

            String query = "UPDATE usuario SET idprivilegio=1 WHERE idusuario=" + idusuario;
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }
     
        public void desnombra_moderador(Integer idusuario) {
        this.init_mysql();
        PreparedStatement pstmt = null;


        try {

            String query = "UPDATE usuario SET idprivilegio=0 WHERE idusuario=" + idusuario;
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }
        
        public void update_nick(int idusuario, String alias) {
        this.init_mysql();
        PreparedStatement pstmt = null;


        try {

            String query = "UPDATE usuario SET alias='" + alias + "' WHERE idusuario=" + idusuario;
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }
    }
        
         public boolean mayuscula(String temp) {
        Boolean valor = true;

        String s = temp;

        String p = s.substring(0, 1);
        if (s.startsWith(p.toLowerCase())) {
            valor = false;
        } else {
            valor = true;
        }

        return valor;
    }
         
     public ArrayList<BeanArchivo> ArchivolistUser(int iduser) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        ArrayList<BeanArchivo> lista_archivos = new ArrayList<BeanArchivo>();


        try {
            
            String query = "SELECT * FROM archivo where idusuario= "+iduser;

//            String query = "SELECT * FROM archivo a"
//                    + "INNER JOIN usuario u ON a.idusuario = u.idusuario"
//                    + "INNER JOIN curso cu ON a.idcurso = cu.idcurso"
//                    + "INNER JOIN estado e ON a.idestado = e.idestado"
//                    + "INNER JOIN tipoarchivo ta ON a.idtipoarchivo = ta.idtipoarchivo"
//                    + "WHERE a.idusuario =" + iduser;

//            String query = "SELECT a.idarchivo, a.semestre, a.nota, a.like, a.num_descargas, a.idusuario, u.nombre, u.alias,"
//                    + "a.idcurso, cu.nombre_curso, cu.tag, a.idestado, e.nombre_estado, a.ruta, a.descripcion, a.fecha_subida, a.tamaño,"
//                    + "a.idtipoarchivo, ta.nombre_tipo"
//                    + "FROM archivo a"
//                    + "LEFT JOIN usuario u ON a.idusuario = u.idusuario"
//                    + "LEFT JOIN curso cu ON a.idcurso = cu.idcurso"
//                    + "LEFT JOIN estado e ON a.idestado = e.idestado"
//                    + "LEFT JOIN tipoarchivo ta ON a.idtipoarchivo = ta.idtipoarchivo"
//                    + "WHERE a.idusuario =" + iduser;

//            pstmt.setInt(1, iduser);
            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();
            BeanArchivo archivo = new BeanArchivo();

            while (res.next()) {
                archivo.setIdarchivo(res.getInt("idarchivo"));
                archivo.setSemestre(res.getString("semestre"));
                archivo.setNota(res.getInt("nota"));
                archivo.setLike(res.getInt("like"));
                archivo.setNum_descargas(res.getInt("num_descargas"));

                BeanUsuario busuario = new BeanUsuario();
                busuario.setIdusuario(res.getInt("idusuario"));
                busuario.setNombre(res.getString("nombre"));
                busuario.setAlias(res.getString("alias"));
                archivo.setUsuario(busuario);

                BeanCurso curso = new BeanCurso();
                curso.setIdcurso(res.getInt("idcurso"));
                curso.setNombre_curso(res.getString("nombre_curso"));
                curso.setTag(res.getString("tag"));
                archivo.setCurso(curso);


                BeanEstado estado = new BeanEstado();
                estado.setIdestado(res.getInt("idestado"));
                estado.setNombre_estado(res.getString("nombre_estado"));
                archivo.setEstado(estado);

                archivo.setRuta(res.getString("ruta"));
                archivo.setDescripcion(res.getString("descripcion"));
                archivo.setFecha_subida(res.getDate("fecha_subida"));
                archivo.setTamaño(res.getDouble("tamaño"));

                BeanTipoArchivo tipoarchivo = new BeanTipoArchivo();
                tipoarchivo.setIdtipoarchivo(res.getInt("idtipoarchivo"));
                tipoarchivo.setNombre_tipo(res.getString("nombre_tipo"));
                archivo.setTipoarchivo(tipoarchivo);

//            String query = "SELECT * from archivo a INNER JOIN usuario u ON u.idusuario = a.idusuario";

                System.out.print(archivo.getIdarchivo());
                lista_archivos.add(archivo);
            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }
        
        return lista_archivos;

    }
     
     public BeanUsuario ValidarCorreo(String correo) {

        BeanUsuario usuario = null;
        this.init_mysql();
        PreparedStatement pst = null;
        ResultSet rs = null;
        try {
             String query = "select u.clave, u.correo from usuario u "
                    + "where u.correo = ?";
            
            pst = conn.prepareStatement(query);
            pst.setString(1, correo);
            rs = pst.executeQuery();
            while (rs.next()) {                
                
                usuario = new BeanUsuario();
                usuario.setClave(rs.getString(1));
                usuario.setCorreo(rs.getString(2));
            }
            rs.close();
            pst.close();
            conn.close();
            
        } catch (SQLException ex) {
            System.err.println("Error al ejecutar el query");
            ex.printStackTrace();
        }finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException ex) {
                    ;
                }
                rs = null;
            }
            if (pst != null) {
                try {
                    pst.close();
                } catch (SQLException ex) {
                    ;
                }
                pst = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException ex) {
                    ;
                }
                conn = null;
            }
        }
        return usuario;
    }
     
     public void setToken(String token, String correo) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        try {


            String query = "Update usuario Set token=? where correo=?;";

            pstmt = conn.prepareStatement(query);
            pstmt.setString(1, token);
            pstmt.setString(2, correo);

            pstmt.executeUpdate();
            pstmt.close();
            conn.close();
        } catch (SQLException ex) {
            System.out.println("no se pudo xD");
        } finally {
            if (pstmt != null) {
                try {
                    pstmt.close();
                } catch (SQLException ex) {
                    ;
                }
                pstmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException ex) {
                    ;
                }
                conn = null;
            }
        }

    }
        
        
     public void cambiarContraseña(int idusuario, String contraseña) {

        
        this.init_mysql();
        PreparedStatement pst = null;
        ResultSet rs = null;
        try {
//            String query = "update usuario set contrasena = AES_ENCRYPT(?,'llave') where idusuario = ?;";
            String query = "update usuario set clave = MD5(?) where idusuario = ?;";
            
            pst = conn.prepareStatement(query);
            pst.setString(1, contraseña);
            pst.setInt(2, idusuario);
            pst.executeUpdate();
            //while (rs.next()) {                
            //  usuario = new BUsuario();
            //  usuario.setContrasena(rs.getString(1));
            //  usuario.setCorreo(rs.getString(2));

            //}
            pst.close();

            conn.close();
        } catch (SQLException ex) {
            System.err.println("Error al ejecutar el query");
            ex.printStackTrace();
        } finally {
            if (pst != null) {
                try {
                    pst.close();
                } catch (SQLException ex) {
                    ;
                }
                pst = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException ex) {
                    ;
                }
                conn = null;
            }
        }
        //return usuario;
    }
     
     public BeanUsuario usuarioXToken(String token) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet rs;
        BeanUsuario bUsuario=null;
        try {


            String query = "Select usuario, idusuario, correo from usuario u where u.token=?";

            pstmt = conn.prepareStatement(query);
            pstmt.setString(1, token);


            pstmt.executeQuery();
            rs = pstmt.getResultSet();

            while (rs.next()) {
                bUsuario= new BeanUsuario();
                bUsuario.setAlias(rs.getString(1));
                bUsuario.setIdusuario(rs.getInt(2));
                bUsuario.setCorreo(rs.getString(3));

            }
            pstmt.close();
            conn.close();
        } catch (SQLException ex) {
            System.out.println("no se pudo xD");
        } finally {
            if (pstmt != null) {
                try {
                    pstmt.close();
                } catch (SQLException ex) {
                    ;
                }
                pstmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException ex) {
                    ;
                }
                conn = null;
            }
        }
        return bUsuario;
    }
    
}
